#include <iostream>
#include <sys/resource.h>
#include <signal.h>

void hanlder(int sgino)
{
    std::cout<<sgino<<std::endl;
    exit(sgino);
}

int main()
{
    //操作1-31信号，验证是哪个信号终止了进程，当然你也可以查看信号名，kill -l对比
    for(int i = 1;i<32;i++)
    {
        signal(i,hanlder);
    }
    //以下是限制CPU的例子，收到24信号终止

    struct rlimit64 rlim;
    rlim.rlim_cur = 2;
    rlim.rlim_max = 3;//这个结构体两个值都是表示限制
    //有所不同的是，我们知道终止进程是OS发送信号来做到的上面个软限制，实际就是发可自定义捕捉处理的信号。
    //而下面个限制是，一旦到达，系统一般发送9好信号等不能被捕捉的自定义的信号

    setrlimit64(RLIMIT_CPU,&rlim);
    while(1);

    //--------------------

    //以下是限制内存的例子,内存限制是字节为单位  收到6信号终止
    // const int64_t MB = 1024*1024;
    // struct rlimit64 rlim;
    // rlim.rlim_cur = 40*MB;
    // rlim.rlim_max = 100*MB;
    // setrlimit64(RLIMIT_AS,&rlim);
    // int ram = 0;
    // while(1)
    // {
    //     sleep(1);
    //     char * p = new char[10*MB];
    //     std::cout<<(ram+=10)<<"MB\n";
    // }
    return 0;
}